perm filename DEBUG.1[MAC,LSP] blob
sn#210800 filedate 1976-04-10 generic text, type T, neo UTF8
;;;DEBUGGING FUNCTION
;;; PRINTS LAST S-EXPRESSION EVALUATED AND WAITS FOR CHARACTER
;;; INPUT. COMMANDS ARE:
;;;
;;; D - MOVE DOWN THE STACK. (BACKWARDS IN TIME - I.E. NEXT TO
;;; LAST EXPRESSION EVALUATED)
;;; U - MOVE UP THE STACK.
;;; T - JUMP BACK TO THE TOP OF THE STACK.
;;;
;;; B - BREAK IN THE ENVIRONMENT OF THE CURRENT EXPRESSION BEING
;;; EXAMINED. THIS IS USEFULL FOR LOOKING AT VALUES OF
;;; VARIABLES IN THIS ENVIRONMENT. TYPE $P TO CONTINUE.
;;; P - PRINT THE CURRENT S-EXPRESSION IN ITS ENTIRETY.
;;; Q - QUIT THE FUNCTION DEBUG.
;;; R - FORCE THE CURRENT EXPRESSION TO RETURN.
;;; ASKS FOR VERIFIATION AND THEN
;;; ASKS FOR A VALUE (WHICH IS EVALUATED) TO BE RETURNED.
;;; C - LIKE "R" BUT RE-EVALUATES THE CURRENT EXPRESSION.
;;; # - IF A POSITIVE NUMBER ,N, PRECEEDS A COMMAND, THEN THAT
;;; COMMAND WILL BE EXECUTED "N" TIMES.
;;; ? - PRINT INFO ON COMMANDS
(DECLARE (GENPREFIX DEBUG))
(DECLARE (*LEXPR DEBUG VERIFY))
(DEFUN DEBUG #ARGS
(PROG (POINTER BACK-POINTERS CHAR TOP-POINTER NUMBER)
(COND ((= #ARGS 1.)
(AND (*RSET (NOUUO (ARG 1.))) (SSTATUS UUOLINKS))
(RETURN (ARG 1.)))
((SETQ POINTER (EVALFRAME NIL))
(OR POINTER (RETURN 'TRY-SETTING-*RSET)))
((RETURN 'STACK-SCREWED-UP--SORRY)))
FIND-START
(COND ((EQ (CAADDR POINTER) 'DEBUG)
(SETQ POINTER (CADR POINTER) TOP-POINTER POINTER))
((SETQ POINTER (EVALFRAME (CADR POINTER)))
(GO FIND-START)))
(SETQ NUMBER 0.)
PRINT((LAMBDA (PRINLEVEL PRINLENGTH)
(PRINT (CADDR (EVALFRAME POINTER))))
3.
4.)
(TERPRI)
READLOOP
(SETQ CHAR (READCH2))
NOREAD
(COND
((NUMBERP CHAR)
(SETQ NUMBER (+ (* NUMBER 10.) CHAR))
(GO READLOOP))
((EQ CHAR 'D)
(COND ((EVALFRAME (CADR (EVALFRAME POINTER)))
(SETQ BACK-POINTERS (CONS POINTER
BACK-POINTERS)
POINTER (CADR (EVALFRAME POINTER))))
((> NUMBER 1.) (SETQ NUMBER 0.))
((PRINT '(YOU ARE AT THE BOTTOM OF THE STACK)))))
((EQ CHAR 'U)
(COND
(BACK-POINTERS
(SETQ POINTER (CAR BACK-POINTERS)
BACK-POINTERS (CDR BACK-POINTERS)))
((> NUMBER 1.) (SETQ NUMBER 0.))
((PRINT '(YOU ARE AT THE TOP OF THE STACK)))))
((EQ CHAR 'B)
(EVAL '(BREAK DEBUG T)
(CADDDR (EVALFRAME POINTER))))
((EQ CHAR 'Q) (RETURN 'END-DEBUG))
((EQ CHAR 'T)
(SETQ POINTER TOP-POINTER BACK-POINTERS NIL))
((EQ CHAR 'C)
(AND (VERIFY 'RE-EVALUATE
'CURRENT
'EXPRESSION?)
(FRETURN (CADR (EVALFRAME POINTER))
(EVAL (CADDR (EVALFRAME POINTER))))))
((EQ CHAR 'R)
(COND ((VERIFY 'FORCE
'RETURN
'FROM
'CURRENT
'EXPRESSION?)
(TERPRI)
(PRINC '>>>WHAT/ SHOULD/ THIS/ S-EXPRESSION/ RETURN?/ / )
(FRETURN (CADR (EVALFRAME POINTER))
(EVAL (READ))))))
((MEMQ CHAR '(/ /
/
)) (GO READLOOP))
((EQ CHAR 'P)
(PRINT (CADDR (EVALFRAME POINTER)))
(GO READLOOP))
((EQ CHAR 'S)
(SPRINTER (CADDR (EVALFRAME POINTER)))
(GO READLOOP))
((EQ CHAR '?)
(PRINT '(OPTIONS ARE: D U B T R C Q P OR ?))
(GO READLOOP))
((PRINC '/ ???/ ) (GO READLOOP)))
(AND (> NUMBER 1.) (SETQ NUMBER (1- NUMBER)))
(AND (> NUMBER 0.) (GO NOREAD))
(GO PRINT)))
;;;READS A CHARACTER AND RETURNS THAT CHARACTER AS EITHER A
;;; NUMBER OR A SYMBOL.
(DEFUN READCH2 NIL
(PROG (X)
(SETQ X (TYI))
(RETURN (COND ((LESSP 47. X 58.) (- X 48.))
((ASCII X))))))
;;;TO GET AROUND JONL'S WEIRD SPELLING
(SETQ BACKTRACE 'BAKTRACE)
(DEFUN BT NIL
(PROG (#SPACES BTLIST )
(SETQ
#SPACES 0.
BTLIST (BAKLIST))
(DO NIL
((OR (NULL BTLIST) (EQ (CAAR BTLIST) 'BT)))
(SETQ BTLIST (CDR BTLIST)))
(AND (= #ARGS 1)
(DO ((I (ARG 1)(1- (ARG 1)))(LIST BTLIST (CDR LIST)))
((NULL LIST) T)
(AND (= I 0.)(RPLACD LIST NIL)(RETURN T))))
(TERPRI)
(MAPC
'(LAMBDA (X) (DO I #SPACES (1- I) (= I 0.) (TYO 32.))
(SETQ #SPACES (COND ((< #SPACES 30.)
(1+ #SPACES))
(T 0.)))
(PRINC (CAR X))
(TERPRI))
(NREVERSE (CDR BTLIST)))
(RETURN '*)))
(DEFUN VERIFY #ARGS
(DECLARE (FIXNUM I))
(TERPRI)
(DO ((I 1. (1+ I))) ((> I #ARGS) T) (PRINC (ARG I)) (TYO 32.))
(TERPRI)
(PRINC 'TYPE/ YES/ OR/ NO:)
(EQ (READ) 'YES))
))))))